
# 获取MQ连接
from pingtai.mqdemo.mqutils import get_connection

connection = get_connection()

# 在连接上创建一个频道CHANNEL
channel = connection.channel()

# 指定一个fanout(广播)类型的交换机exchange，名字为logs。
channel.exchange_declare(exchange='logs', exchange_type='fanout')

# 创建一个队列，exclusive=True（唯一性）表示在消费者与rabbitmq断开连接时，该队列会自动删除掉
result = channel.queue_declare(exclusive=True)

# 因为rabbitmq要求新队列名必须是与现存队列名不同，所以为保证队列的名字是唯一的，method.queue方法会随机创建一个队列名字
queue_name = result.method.queue

# 将交换机logs与接收消息的队列绑定。表示生产者将消息发给交换机logs，logs将消息发给随机队列queue，消费者在随机队列queue中取消息
channel.queue_bind(exchange='logs', queue=queue_name)

print('[消费者] Waiting for logs. To exit press CTRL+C')


# 定义一个回调函数，用来接收生产者发送的消息
def callback(ch, method, properties, body):
    print("[消费者] Received %r" % body)


# 开启一个死循环接受MQ消息。
channel.basic_consume(callback,  # 调用回调函数，从队列里取消息
                      queue=queue_name,  # 指定取消息的队列名
                      no_ack=True,  # 设置为消费者不给rabbitmq回复确认。
                      )

# 开始循环取消息
channel.start_consuming()
